package com.bstek.bdf2.core.redis;

import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;
import java.util.function.Function;

/**
 * @Title: redis缓存接口
 * @Package: com.bstek.bdf2.core.redis
 * @Description:
 * @Author: zxq
 * @Date: 2024/1/23 - 21:32
 */
@Component
public interface BstekRedisCache<ID,R> {

    public static final String BEAN_ID = "bdf2.BstekRedisCache";



    boolean deleteKey(String key);
    /**
     *  查询redis缓存，没有set
     * @param infoBody
     * @param <R>
     * @param <ID>
     * @return
     */
       <R,ID> R queryRedisOrSave(InfoBody infoBody);

    /**
     *
     * @param keyPrefix 前缀
     * @param id 主键
     * @param type 类
     * @param fallback 回调函数
     * @param time 过期时间
     * @param unit 时间单位
     * @param <R> 返回值类型
     * @param <ID> 参数类型
     * @return
     */
       <R,ID> R queryRedisOrSave(String keyPrefix, ID id, Class<R> type,
                                               Function<ID, R> fallback, Long time, TimeUnit unit);

    /**
     * Redis生成全局唯一Id
     * @param keyPrefix
     * @return
     */
      long nextId(String keyPrefix);

}
